#include "GY_NPage.h"

GY_NPage::GY_NPage()
{

}
/**
 * @brief NPage::setListCount 设置列表数据总数
 * @param count
 */
GY_NPage* GY_NPage::setListCount(const qint32 &count)
{
    if(count > 0){
        this->m_listCount = count;
        calculateMaxPage();
    }
    return this;
}
/**
 * @brief NPage::setPageSize 设置每页的数据大小
 * @param pageSize
 */
GY_NPage* GY_NPage::setPageSize(const qint32 &pageSize)
{
    if(pageSize > 0){
        this->m_pageSize = pageSize;
        calculateMaxPage();
    }
    return this;
}
/**
 * @brief NPage::calculateMaxPage 根据数据总数与每页分页数量计算最大分页数，同时调整当前分页数
 */
void GY_NPage::calculateMaxPage()
{
    m_maxPage = qMax(qCeil(m_listCount*1.0/m_pageSize),1);
    if(m_maxPage < m_currentPage){
        m_currentPage = m_maxPage;
    }
}
/**
 * @brief NPage::getMaxPage 获取最大分页数量
 * @return
 */
qint32 GY_NPage::getMaxPage()
{
    return this->m_maxPage;
}
/**
 * @brief NPage::setCurrentPage 设置当前分页，如果设置的值不在1到最大分页则无效
 * @param page
 */
GY_NPage* GY_NPage::setCurrentPage(const qint32 &page)
{
    if(page >= 1 && page <= m_maxPage){
        this->m_currentPage = page;
    }
    return this;
}
/**
 * @brief NPage::getCurrentPage 获取当前页码
 * @return
 */
qint32 GY_NPage::getCurrentPage()
{
    return this->m_currentPage;
}
/**
 * @brief NPage::getPrePage 获取上一页码，如果已经为第1页则保持上一数据也就是第一页
 * @return
 */
qint32 GY_NPage::getPrePage()
{
    if(m_currentPage - 1 > 0){
        m_currentPage--;
    }
    return m_currentPage;
}
/**
 * @brief NPage::getNextPage 获取下一页码，如果已经是最大页则保持上一数据也就是最大页码数
 * @return
 */
qint32 GY_NPage::getNextPage()
{
    if(m_currentPage + 1 <= m_maxPage){
        m_currentPage++;
    }
    return m_currentPage;
}
/**
 * @brief NPage::getFirstPage 获取第一页，并将当前页指向第一页
 * @return
 */
qint32 GY_NPage::getFirstPage()
{
    m_currentPage = 1;
    return m_currentPage;
}
/**
 * @brief NPage::getLastPage 获取最后一页，并将当前页指向最后一页
 * @return
 */
qint32 GY_NPage::getLastPage()
{
    m_currentPage = m_maxPage;
    return m_currentPage;
}
